package com.zhongjianjian.RabbitMq.XiaoFeiXiaoXi;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * @类名: com.zhongjianjian.RabbitMq.XiaoFeiXiaoXi
 * @作者: lgt
 * @创建时间: 2020-03-03 16:32
 * @描述:消息的接收确认
 **/
@Component
@RabbitListener(queues = {"TEST-QUEUE"})
public class TestChuLiReceiveMessage {

    @RabbitHandler
    public void test(Object obj, Message message, Channel channel) throws IOException {

        String s = new String(message.getBody());
        System.out.println(s+"====="+message);

        //处理业务
        //设置每一次从队列中获取的消息的个数,来达到消费端流控的目的
        //channel.basicQos(10);

        //如果业务处理成功，进行消息消费的确认
        //参数1 表示消息在队列中的唯一的标号，参数2表示是否确认该标号之前的所有的消息
        //channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);

        //如果业务处理失败
        //参数1表示消息在队列中的唯一的标号，参数2表示是否确认该标号之前的所有的消息 参数三表示是否重新入队
        channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true);
        System.out.println("=======>"+obj);
    }
}
